package com.wgy.day29多线程.解决线程安全问题的方式.同步代码块;

/**
 * Created by pc on 2020/11/27 22:04
 * Description: LearningJava
 */

 class RunnableImpl implements Runnable {
    private int ticket=100;
    //创建一个锁对象
    Object obj=new Object();

    @Override
    public void run() {
        while(true){

            //线程获取锁对象obj,进入到同步代码块中执行
            synchronized (obj){
                if(ticket>0){
                    try {
                        Thread.sleep(10);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    //票存在,卖票,ticket--
                    System.out.println(Thread.currentThread().getName()+"-->正在买第"+ticket+"张票");
                    ticket--;
                }

            }
            //线程出了代码块,归还锁对象obj,然后和其他线程再一起抢夺CPU和锁对象,谁拿到锁对象,谁来执行同步代码块
        }
    }
}
